<?php
require_once(Config::acquire('Controller', null, 'controller'));
require_once(Config::acquire('Incident', MODEL));
require_once(Config::acquire('Gebruiker', MODEL));
require_once(Config::acquire('Hardware', MODEL));
require_once(Config::acquire('Diensten', MODEL));

/**
 * Created by JetBrains PhpStorm.
 * User: Sander
 * Date: 27-6-11
 * Time: 10:03
 * To change this template use File | Settings | File Templates.
 */

class IncidentController extends Controller
{
    /**
     * Index:
     * Hier wordt in het kort info gegeven.
     * @return void
     */
    public function index()
    {
        $this->view->render('Incident.tpl');
    }

    /**
     * Overzicht:
     * Hier wordt een ovverzicht weergegeven en bij klikken op ID ga je naar detail
     * @return void
     */

    public function overzicht()
    {
        $list = array();
        foreach (Incident::readAll() as $incident)
            $list[] = $incident->toArray();
        $this->view->assign('IncidentTitle', 'Incidentoverzicht');
        $this->view->assign('detail_link', SDS::getURL('Incident', 'detail'));
        $this->view->assign('diensten', SDS::getURL('Diensten', 'detail'));
        $this->view->assign('gebruiker_link', SDS::getURL('Gebruiker', 'detail'));
        $this->view->assign('medewerker_link', SDS::getURL('Employee', 'detail'));
        $this->view->assign('hardware_link', SDS::getURL('Hardware', 'detail'));
        $this->view->assign('sla_link', SDS::getURL('Sla', 'detail'));
        $this->view->assign("incidentlijst", $list);
        $this->view->render('Incident_List.tpl');
    }

    /**
     * Hier worden de openstaande incidenten weergegeven
     */
    public function overzichtOpenstaand()
    {
        $list = array();
        foreach (Incident::readAfgehandeld() as $incident)
            $list[] = $incident->toArray();
        $this->view->assign('IncidentTitle', 'Openstaande Incidenten');
        $this->view->assign('detail_link', SDS::getURL('Incident', 'detail'));
        $this->view->assign('diensten_link', SDS::getURL('Diensten', 'detail'));
        $this->view->assign('gebruiker_link', SDS::getURL('Gebruiker', 'detail'));
        $this->view->assign('medewerker_link', SDS::getURL('Employee', 'detail'));
        $this->view->assign('hardware_link', SDS::getURL('Hardware', 'detail'));
        $this->view->assign('sla_link', SDS::getURL('Sla', 'detail'));
        $this->view->assign("incidentlijst", $list);
        $this->view->render('Incident_List.tpl');
    }

     /**
     * Detail:
     * Gedetaileerde omschrijving van een employee.
     * Bij klikken op wijzigen of verwijderen ga je naar betreffende onderdeel toe.
     * @return void
     */

    public function detail()
    {
        require_once(Config::acquire('Incident', MODEL));
        $params = UrlDecoder::get_Params();

        if (is_null($params[0]))
            SDS::redirect("Incident", "overzicht");
        $id = $params[0];
        foreach (Incident::read($id)->toArray() as $key => $value) {
            $this->view->assign($key, $value);
        }
        $this->view->assign('wijzig_url', SDS::getURL('Incident', 'bewerken', array($params[0])));
        $this->view->assign('afhandel_url', SDS::getURL('Incident', 'Afhandelen', array($params[0])));
        $this->view->assign('diensten_link', SDS::getURL('Diensten', 'detail'));
        $this->view->assign('gebruiker_link', SDS::getURL('Gebruiker', 'detail'));
        $this->view->assign('medewerker_link', SDS::getURL('Employee', 'detail'));
        $this->view->assign('sla_link', SDS::getURL('Sla', 'detail'));
        $this->view->assign('hardware_link', SDS::getURL('Hardware', 'detail'));
        $this->view->assign('IncidentTitle', 'Incident wijzigen');

        $this->view->render('Incident_Detail.tpl');
    }

   /**
     * Bewerken:
     * het terughalen van de oude opties en de mogelijkheid om deze te veranderen.
     * wordt direct doorgestuurd naar het formulier.
     *
     * @return void
     */

    public function bewerken()
    {
        $gebruikerIDs = array();
        $medewerkerIDs = array();
        $slaIDs = array();
        $dienstIDs = array();
        $hardwareIDs = array();

        require_once(Config::acquire('Incident', MODEL));
        $params = UrlDecoder::get_Params();
        if (!isset($params[0]))
            SDS::redirect("Incident", "overzicht");
        $id = $params[0];

        foreach (Incident::read($id)->toArray() as $key => $value) {
            $this->view->assign($key, $value);
        }
        foreach (Sla::readAll() as $sla) {
            $slaIDs[$sla->getID()] = $sla->getOmschrijving();
        }
        foreach (Diensten::readAll() as $diensten) {
            $dienstIDs[$diensten->getID()] = $diensten->getOmschrijving();
        }
        foreach (Hardware::readAll() as $hardware) {
            $hardwareIDs[$hardware->getID()] = $hardware->getNaam();
        }

        $this->view->assign('hardwares', $hardwareIDs);
        $this->view->assign('diensten', $dienstIDs);
        $this->view->assign('slas', $slaIDs);
        $this->view->assign('form_URL', SDS::getURL('Incident', 'update', array($id)));
        $this->view->assign('IncidentTitle', "Incident wijzigen");
        $this->view->render("Incident_Change.tpl");
    }

    /**
     * Toevoegen:
     * Gegevens  worden klaargezet om in een formulier te worden gezet
     * @return void
     */
    public function toevoegen()
    {
        $gebruikerIDs = array();
        $slaIDs = array();
        $hardwareIDs = array();

        foreach (Gebruiker::readAll() as $gebruiker) {
            $gebruikerIDs[$gebruiker->getID()] = $gebruiker->getNaam();
        }
        foreach (Diensten::readAll() as $diensten) {
            $dienstIDs[$diensten->getID()] = $diensten->getOmschrijving();
        }
        foreach (Sla::readAll() as $sla) {
            $slaIDs[$sla->getID()] = $sla->getOmschrijving();
        }
        foreach (Hardware::readAll() as $hardware) {
            $hardwareIDs[$hardware->getID()] = $hardware->getNaam();
        }
        require_once(Config::acquire('Incident', MODEL));
        $this->view->assign('hardwares', $hardwareIDs);
        $this->view->assign('gebruikers', $gebruikerIDs);
        $this->view->assign('diensten', $dienstIDs);
        $this->view->assign('slas', $slaIDs);
        $this->view->assign('form_URL', SDS::getURL('Incident', 'add', null));
        $this->view->render("Incident_Change.tpl");
    }

    /**
 * Add:
 * Hier wordt het invul formulier aangeroepen om een dienst toe te voegen
 * @return void
 */
    public function add()
    {
        require_once(Config::acquire('Incident', MODEL));
        require_once(Config::acquire('FormValidation', APPLICATION));
        FormValidation::stripInput();
        Incident::create(null,
                         $_POST['Omschrijving'],
                         'nee',
                         Diensten::read($_POST['Dienst']),
                         Gebruiker::read($_POST['Gebruiker']),
                         Medewerker::read(Register::get('medewerker_ID', true)),
                         Sla::read($_POST['Sla']),
                         Hardware::read($_POST['Hardware']),
                         date('Y-m-d H:i:s'),
                         null)->update();
       Register::set('incident',SQL::query("SELECT * FROM `incident` order by `Incident_ID` desc")->fetchField('Incident_ID'),true);
        SDS::redirect("Script", "question", array(Diensten::read($_POST['Dienst'])->getQuestion()->getId()));
    }

       /**
 * Delete:
 * Hier wordt een bestaand gegeven gedeleted op moment dat de functie wordt aangeroepen
 * @return void
 *
 */

    public function delete()
    {
        $id = UrlDecoder::get_Params();
        if (isset($id[0])) {
            require_once(Config::acquire('Incident', MODEL));
            Incident::read($id[0])->delete();
            SDS::redirect("Incident", "overzicht", null);
        }
    }

    /**
     * Update:
     * Geeft de gegevens door aan de database en zet deze er in.
     * @return void
     */

    public function update()
    {
        require_once(Config::acquire('Incident', MODEL));
        require_once(Config::acquire('FormValidation', APPLICATION));
        FormValidation::stripInput();
        $params = UrlDecoder::get_Params();
        if (isset($params[0])) {

            $incident = Incident::read(($params[0]));
            $incident->setOmschrijving($_POST['Omschrijving']);
            $incident->setDiensten(Diensten::read($_POST['Dienst']));
            $incident->setSla(SLA::read($_POST['Sla']));
            $incident->setHardware(Hardware::read($_POST['Hardware']));
            $incident->update();
            SDS::redirect("Incident", "detail", $params[0]);
        }
        SDS::redirect("Incident", "overzicht", null);
    }


   /**
    * Hier wordt de optie afhandelen aangeroepen en gaat dan naar detail.
    *
    */

    public function afhandelen()
    {
        $id = UrlDecoder::get_Params();
        if (!is_null($id[0])) {
            Incident::read($id[0])->Afhandelen();
        }
        SDS::redirect('Incident', 'detail', array($id[0]));
    }
}
